Skip to content

Fix footer documentation access with in-app documents hub#41

Open
krandder wants to merge 1 commit into
mainfrom
fix/footer-documents-access
Open

Fix footer documentation access with in-app documents hub#41
krandder wants to merge 1 commit into
mainfrom
fix/footer-documents-access

Conversation

@krandder

Copy link
Copy Markdown
Contributor

Summary

  • point the footer Documentation link at an in-app /documents route instead of the unstable external docs host
  • add a public documents index page with direct links to the canonical docs repo and key protocol/DAO/reference documents
  • add a /docs alias so either path works

Why

As checked on March 10, 2026, https://docs.futarchy.fi redirects to https://github.com/futarchy-fi/docs/blob/main/README.md rather than a dedicated docs surface. Routing the footer through an in-app page makes the website path reliable even when that external redirect behaves poorly in some browsers or wallet webviews.

Validation

  • npx next lint --file src/components/common/Footer.jsx --file src/pages/documents/index.jsx --file src/pages/docs/index.jsx
  • full npm run build did not complete in this environment because the existing Next export process exited with SIGBUS after the standard output: export header warnings

@netlify

netlify Bot commented Mar 10, 2026

Copy link
Copy Markdown

Deploy Preview for futarchy ready!

Name Link
🔨 Latest commit db2b7a2
🔍 Latest deploy log https://app.netlify.com/projects/futarchy/deploys/69b050a76430bd00081a7f44
😎 Deploy Preview https://deploy-preview-41--futarchy.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

krandder added a commit that referenced this pull request May 10, 2026
Catalogue completion: discovered the repo has only 42 PRs total (range
#23..#65 with one gap at #38), not the assumed ~65. The 3 missing from
the previous count are all currently OPEN: #36 (chart zoom reset), #40
(position tab indicator), #41 (footer docs hub). Catalogued under a
new "Open PRs" section. Catalogue is now 42/42 (full coverage).

Snapshot field corrected from "40 / ~65" to "42 / 42" + stale "still
need to be catalogued" footer note replaced.

Test: footer-links.test.mjs (6 cases) — static lint of NAV_LINKS in
src/components/common/Footer.jsx. Pins:

  - Every entry has label + href
  - external: true ↔ absolute http(s) href
  - non-external entries are path-relative
  - Documentation href is in an accepted set covering BOTH the current
    external URL AND the post-PR-#41 in-app routes — stays green
    through the transition, surfaces typos / accidental redirects
  - Status link pinned at canonical https://status.futarchy.fi

Tests: 79 → 85 (interface), 146 → 152 cross-repo. All green.
krandder added a commit that referenced this pull request May 11, 2026
…(/companies row complete 16/16)

Adds 41-candles-504-gateway-timeout.scenario.mjs — fills the
2nd cell of the new "gateway timeout 504" matrix row (companion
to #40 on registry side). REGISTRY happy + CANDLES 504 +
Content-Type: text/html + nginx-style HTML body (no JSON, no
Retry-After). Asserts the carousel renders the event card but
the price degrades to "0.00 SDAI" — same terminal UX as #3
(502) and #37 (429) but DIFFERENT control flow.

Distinct from #3 and #37:
- vs #3 (502 + JSON): #3's body parses cleanly, consumer
  hits .catch on structured envelope. #41's body is HTML —
  .json() throws SyntaxError BEFORE the consumer's
  status-check runs. Different bug-class entirely.
- vs #37 (429 + Retry-After + JSON): #37 has explicit
  Retry-After contract clients SHOULD respect. #41 has no
  Retry-After (504s typically lack one). Consumer that
  conflates them ignores Retry-After on 429 OR fails to
  retry on 504 — invisible regression class.

Distinct from #40 (same row, registry side): #40 takes the
carousel-data-source out (registry empty → "No organizations
found"); #41 keeps it healthy but takes the per-card
price-fetch out — exercises 2nd-tier data-fetch failure with
504+HTML control flow.

Bug-shapes captured: per-pool fetcher crashes on
JSON.parse(html) throwing SyntaxError, per-pool fetcher
renders raw HTML body in price card, per-pool fetcher treats
504 as success with empty data (silent broken state),
per-pool fetcher hammers candles upstream with retries (no
Retry-After to respect — worse than #37), card hangs on
LoadingSpinner forever (parse error before loading-cleanup),
bulk-prefetch vs per-pool fallback race wins/loses
unpredictably.

MATRIX MILESTONE: /companies completes the new 8th row →
16/16 cells filled across all 8 failure-mode rows × 2
endpoints. /markets/[address] still 14/16 (next two slices
will fill the market-page side of the new row).

Live re-validation: smoke 80/80 (pin floor bumped from 15 to
16 on /companies), scenario #41 passes in 2.3s on first run,
catalog regenerated (41 scenarios).
krandder added a commit that referenced this pull request May 11, 2026
… 32/32 (FULL PARITY)

Adds 43-market-page-candles-504-gateway-timeout.scenario.mjs —
the LAST cell of the expanded 8-row chaos matrix. Mirror of #41
applied to the market page's distinct candles-consumer surface
(chart panel + per-pool spot prices + trading-panel preview).

Distinct from prior chaos slices on the same page:
- vs #25 (502+JSON): 502+JSON fires .catch on structured
  envelope; 504+HTML fires .then then THROWS during .json()
  parse — completely different control flow path.
- vs #39 (429+Retry-After+JSON): 429+JSON has explicit
  Retry-After contract; 504+HTML has no Retry-After AND
  throws on parse — consumer can't even read structured
  error message to log what happened.
- vs #42 (registry-504+HTML on same page): #42 takes the
  proposal-metadata enrichment out (chart + trading panels
  unaffected); #43 takes candles-side data sources out
  (chart + per-pool prices + trading-preview all hit the
  parse-error path) — entirely different downstream consumer
  cascade.
- vs #41 (candles-504 on /companies): #41's downstream
  consumer is the carousel price-card formatter → "0.00 SDAI"
  fallback string. #43's downstream consumers are the chart
  panel renderer + per-pool spot-price displays + trading-
  panel preview-price calculator — much larger surface area,
  distinct UX contracts per panel.

REGISTRY happy + CANDLES 504 + Content-Type: text/html +
nginx-style HTML body (no JSON, no Retry-After). Page-shell
assertions (Trading Pair + wallet shorthand) prove a candles-
side gateway-timeout doesn't cascade to a hung/crashed
page-shell.

Bug-shapes captured: chart panel crashes on JSON.parse(html)
throwing SyntaxError, chart panel hangs forever (parse error
before loading-cleanup; distinct from #25 .catch path),
chart-fetch hammers candles upstream with retries (no backoff,
no Retry-After to respect — worse than #39; worse than
/companies because chart refetches on hover/zoom/time-window-
change), per-pool spot-price renders raw HTML body, trading
panel preview crashes from candles-derived feed parse-error
(NaN math), whole-page crash from missing chart error
boundary (collateral damage).

8-ROW MATRIX MILESTONE: full 8-row × 2-endpoint × 2-page grid
now 32/32 cells filled — every interface-side chaos failure-
mode in the expanded 8-row catalog is GUARANTEED to be probed
on both pages. The matrix grew from 28 to 32 cells over 4
slices (#40#41#42#43); full parity re-attained at
the new row count in the same number of slices it took to
open the row.

Live re-validation: smoke 80/80 (pin floor bumped from 15 to
16 on /markets/[address]), scenario #43 passes in 3.9s on
first run, catalog regenerated (43 scenarios), matrix script
shows /companies 16/16 + /markets/[address] 16/16 = 32/32.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant